/** 数据库字段类型 */
export type FieldType
  = | "string"
    | "number"
    | "boolean"
    | "date"
    | "datetime"
    | "text"
    | "json"

/** 关联关系类型 */
export type RelationType
  = | "one-to-one"
    | "one-to-many"
    | "many-to-one"
    | "many-to-many"

/** 数据表字段定义 */
export interface TableField {
  /** 字段ID */
  id: string
  /** 字段名称 */
  name: string
  /** 字段类型 */
  type: FieldType
  /** 字段长度 */
  length?: number
  /** 是否必填 */
  required: boolean
  /** 是否主键 */
  isPrimary: boolean
  /** 是否自增 */
  autoIncrement: boolean
  /** 默认值 */
  defaultValue?: string
  /** 字段注释 */
  comment?: string
  /** 关联配置 */
  relation?: FieldRelation
}

/** 字段关联配置 */
export interface FieldRelation {
  /** 关联表ID */
  targetTableId: string
  /** 关联表名称 */
  targetTableName: string
  /** 关联字段ID */
  targetFieldId: string
  /** 关联字段名称 */
  targetFieldName: string
  /** 关联类型 */
  type: RelationType
  /** 是否启用 */
  enabled: boolean
}

/** 数据表定义 */
export interface DataTable {
  /** 表ID */
  id: string
  /** 表名 */
  name: string
  /** 表注释 */
  comment: string
  /** 字段列表 */
  fields: TableField[]
  /** 创建时间 */
  createdAt: string
  /** 更新时间 */
  updatedAt: string
}

/** API接口定义 */
export interface ApiEndpoint {
  /** 接口ID */
  id: string
  /** 接口名称 */
  name: string
  /** 接口路径 */
  path: string
  /** HTTP方法 */
  method: "GET" | "POST" | "PUT" | "DELETE"
  /** 关联表ID */
  tableId: string
  /** 关联表名称 */
  tableName: string
  /** 查询字段配置 */
  queryFields: QueryFieldConfig[]
  /** 返回字段配置 */
  responseFields: ResponseFieldConfig[]
  /** 接口描述 */
  description?: string
  /** 是否启用分页 */
  enablePagination: boolean
  /** 是否启用排序 */
  enableSort: boolean
}

/** 查询字段配置 */
export interface QueryFieldConfig {
  /** 字段ID */
  fieldId: string
  /** 字段名称 */
  fieldName: string
  /** 表ID */
  tableId: string
  /** 表名称 */
  tableName: string
  /** 查询操作符 */
  operator: "eq" | "ne" | "gt" | "gte" | "lt" | "lte" | "like" | "in" | "between"
  /** 是否必填 */
  required: boolean
  /** 是否启用 */
  enabled: boolean
}

/** 返回字段配置 */
export interface ResponseFieldConfig {
  /** 字段ID */
  fieldId: string
  /** 字段名称 */
  fieldName: string
  /** 表ID */
  tableId: string
  /** 表名称 */
  tableName: string
  /** 字段别名 */
  alias?: string
  /** 是否启用 */
  enabled: boolean
  /** 关联路径（用于显示字段来源） */
  relationPath?: string[]
}

/** 接口生成配置 */
export interface GenerateConfig {
  /** 项目名称 */
  projectName: string
  /** 基础路径 */
  basePath: string
  /** 版本号 */
  version: string
  /** 作者 */
  author: string
  /** 描述 */
  description: string
  /** 生成类型 */
  generateTypes: ("swagger" | "typescript" | "mock")[]
}
